package com.own.component.common.base.entity;

import com.own.component.common.base.entity.po.BaseBean;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.FieldNameConstants;

import java.io.Serializable;

/**
 * BaseDto
 *
 * @author chenxueli
 * @date 2020/6/15 10:38
 */
@Schema(title = "前端到后端控制层对象dto")
@Getter
@Setter
@ToString
@FieldNameConstants
public abstract class BaseDto<T extends BaseBo<? extends BaseBean>> implements Serializable {

    @Schema(title = "备注")
    private String memo;

    /**
     * 验证数据
     */
    public void check() {
        this.init();
    }

    /**
     * 初始化
     */
    protected void init() {

    }

    /**
     * 转业务层对象
     *
     * @return 业务层对象
     */
    public T toBo() {
        return toBo(null);
    }

    /**
     * 转业务层对象
     *
     * @param entity 原业务层对象
     * @return 业务层对象
     */
    public T toBo(T entity) {
        if (entity != null) {
            entity.setMemo(memo);
        }
        return entity;
    }

    /**
     * 初始化开关状态
     *
     * @param status 开关状态
     * @return 开关状态
     */
    protected final Integer initSwitchStatus(Integer status) {
        return initSwitchStatus(status, 0);
    }

    /**
     * 初始化开关状态
     *
     * @param status       开关状态
     * @param defaultValue 默认值
     * @return 开关状态
     */
    protected final Integer initSwitchStatus(Integer status, Integer defaultValue) {
        return status == null ? defaultValue : status % 2;
    }

}
